Attribute VB_Name = "Module1"
Option Explicit

Public g_Config As New Collection

Public Sub LoadHTMLMathSymbol(ByVal o As Collection)
With o
'escape character
.Add "#", StringToHex("#")
.Add "$", StringToHex("$")
.Add "%", StringToHex("%")
.Add "&amp;", StringToHex("&")
.Add "{", StringToHex("{")
.Add "}", StringToHex("}")
.Add "\", StringToHex("backslash")
'spaces
.Add "&#x2000;", StringToHex(" ")
.Add "&#x2006;", StringToHex(",")
.Add "&#x205F;", StringToHex(":")
.Add "&#x2005;", StringToHex(";")
.Add "&#x3000;", StringToHex("quad")
.Add "&#x3000;&#x3000;", StringToHex("qquad")
'greek capital
.Add "&#x393;", StringToHex("Gamma")
.Add "&#x394;", StringToHex("Delta")
.Add "&#x398;", StringToHex("Theta")
.Add "&#x39B;", StringToHex("Lambda")
.Add "&#x39E;", StringToHex("Xi")
.Add "&#x3A0;", StringToHex("Pi")
.Add "&#x3A3;", StringToHex("Sigma")
.Add "&#x3A5;", StringToHex("Upsilon")
.Add "&#x3A6;", StringToHex("Phi")
.Add "&#x3A8;", StringToHex("Psi")
.Add "&#x3A9;", StringToHex("Omega")
'greek
.Add "<i>&#x3B1;</i>", StringToHex("alpha")
.Add "<i>&#x3B2;</i>", StringToHex("beta")
.Add "<i>&#x3B3;</i>", StringToHex("gamma")
.Add "<i>&#x3B4;</i>", StringToHex("delta")
.Add "<i>&#x3B5;</i>", StringToHex("varepsilon")
.Add "<i>&#x3B6;</i>", StringToHex("zeta")
.Add "<i>&#x3B7;</i>", StringToHex("eta")
.Add "<i>&#x3B8;</i>", StringToHex("theta")
.Add "<i>&#x3B9;</i>", StringToHex("iota")
.Add "<i>&#x3BA;</i>", StringToHex("kappa")
.Add "<i>&#x3BB;</i>", StringToHex("lambda")
.Add "<i>&#x3BC;</i>", StringToHex("mu")
.Add "<i>&#x3BD;</i>", StringToHex("nu")
.Add "<i>&#x3BE;</i>", StringToHex("xi")
.Add "<i>&#x3BF;</i>", StringToHex("omicron")
.Add "<i>&#x3C0;</i>", StringToHex("pi")
.Add "<i>&#x3C1;</i>", StringToHex("rho")
.Add "<i>&#x3C2;</i>", StringToHex("varsigma")
.Add "<i>&#x3C3;</i>", StringToHex("sigma")
.Add "<i>&#x3C4;</i>", StringToHex("tau")
.Add "<i>&#x3C5;</i>", StringToHex("upsilon")
.Add "&#x1D719;", StringToHex("phi")
.Add "<i>&#x3C7;</i>", StringToHex("chi")
.Add "<i>&#x3C8;</i>", StringToHex("psi")
.Add "<i>&#x3C9;</i>", StringToHex("omega")
.Add "<i>&#x3D1;</i>", StringToHex("vartheta")
.Add "&#x1D711;", StringToHex("varphi")
.Add "<i>&#x3D6;</i>", StringToHex("varpi")
.Add "<i>&#x3F1;</i>", StringToHex("varrho")
.Add "<i>&#x3F5;</i>", StringToHex("epsilon")
'cyrillic capital
.Add "&#x428;", StringToHex("Sha")
'symbols
.Add "&#x2135;", StringToHex("aleph")
.Add "&#x210F;", StringToHex("hbar")
.Add "<i>&#x131;</i>", StringToHex("imath")
.Add "<i>&#x237;</i>", StringToHex("jmath")
.Add "<i>&#x2113;</i>", StringToHex("ell")
.Add "&#x2118;", StringToHex("wp")
'.Add "", StringToHex("emptyset")
.Add "&#x2205;", StringToHex("varnothing")
.Add "&#x2220;", StringToHex("angle")
.Add "&#x221E;", StringToHex("infty")
.Add "&#x2202;", StringToHex("partial")
.Add "&#x2207;", StringToHex("nabla")
.Add "&#x25B3;", StringToHex("triangle") '??
.Add "&#x2200;", StringToHex("forall")
.Add "&#x2203;", StringToHex("exists")
.Add "&not;", StringToHex("neg")
.Add "&#x221A", StringToHex("surd")
.Add "&#x22A4;", StringToHex("top")
.Add "&#x22A5;", StringToHex("bot")
'.Add "", StringToHex("flat")
'.Add "", StringToHex("natural")
'.Add "", StringToHex("sharp")
.Add "&#x2225;", StringToHex("|")
'.Add "", StringToHex("clubsuit")
'.Add "", StringToHex("diamondsuit")
'.Add "", StringToHex("heartsuit")
'.Add "", StringToHex("spadesuit")
'.Add "", StringToHex("mho")
.Add "&#x2026;", StringToHex("ldots")
.Add "&#x22EF;", StringToHex("cdots")
.Add "&sdot;", StringToHex("cdot")
.Add "&#x22EE;", StringToHex("vdots")
.Add "&#x22F1;", StringToHex("ddots")
'functions TODO:
'brackets
.Add "&#x2308;", StringToHex("lceil")
.Add "&#x2309;", StringToHex("rceil")
.Add "&#x230A;", StringToHex("lfloor")
.Add "&#x230B;", StringToHex("rfloor")
.Add "&#x2329;", StringToHex("langle")
.Add "&#x232A;", StringToHex("rangle")
'operators
.Add "&#x2204;", StringToHex("nexists")
.Add "&#x2208;", StringToHex("in")
.Add "&#x2209;", StringToHex("notin")
.Add "&#x220B;", StringToHex("ni")
.Add "&#x220C;", StringToHex("notni") 'new
.Add "&#x2213;", StringToHex("mp")
.Add "&#x2214;", StringToHex("dotplus")
.Add "&#x2216;", StringToHex("setminus")
.Add "&#x2217;", StringToHex("ast")
.Add "&#x2218;", StringToHex("circ")
.Add "&#x221D;", StringToHex("propto")
.Add "&#x2223;", StringToHex("mid")
.Add "&#x2224;", StringToHex("nmid")
.Add "&#x2225;", StringToHex("parallel")
.Add "&#x2226;", StringToHex("nparallel")
.Add "&#x2227;", StringToHex("wedge")
.Add "&#x2228;", StringToHex("vee")
.Add "&#x2229;", StringToHex("cap")
.Add "&#x222A;", StringToHex("cup")
.Add "&#x2234;", StringToHex("therefore")
.Add "&#x2235;", StringToHex("because")
.Add "&#x223C;", StringToHex("sim")
.Add "&#x223D;", StringToHex("backsim")
.Add "&#x2240;", StringToHex("wr")
.Add "&#x2241;", StringToHex("nsym")
.Add "&#x2242;", StringToHex("eqsim") 'new
.Add "&#x2243;", StringToHex("simeq")
.Add "&#x2244;", StringToHex("nsimeq") 'new
.Add "&#x2245;", StringToHex("cong")
.Add "&#x2247;", StringToHex("ncong")
.Add "&#x2248;", StringToHex("approx")
.Add "&#x2249;", StringToHex("napprox")
.Add "&#x224A;", StringToHex("approxeq")
.Add "&#x224D;", StringToHex("asymp")
.Add "&#x224E;", StringToHex("Bumpeq")
.Add "&#x224F;", StringToHex("bumpeq")
.Add "&#x2250;", StringToHex("doteq")
.Add "&#x2251;", StringToHex("doteqdot")
.Add "&#x2252;", StringToHex("fallingdotseq")
.Add "&#x2253;", StringToHex("risingdotseq")
.Add "&#x2254;", StringToHex("coloneqq")
.Add "&#x2255;", StringToHex("eqqcolon")
.Add "&#x2256;", StringToHex("eqcirc")
.Add "&#x2257;", StringToHex("circeq")
.Add "&#x225C;", StringToHex("triangleq")
.Add "&#x2260;", StringToHex("neq")
.Add "&#x2261;", StringToHex("equiv")
.Add "&#x2262;", StringToHex("nequiv")
.Add "&#x2264;", StringToHex("leq")
.Add "&#x2264;", StringToHex("leqslant")
.Add "&#x2265;", StringToHex("geq")
.Add "&#x2265;", StringToHex("geqslant")
.Add "&#x2266;", StringToHex("leqq")
.Add "&#x2267;", StringToHex("geqq")
.Add "&#x2268;", StringToHex("lneqq")
.Add "&#x2269;", StringToHex("gneqq")
.Add "&#x226A;", StringToHex("ll")
.Add "&#x226B;", StringToHex("gg")
.Add "&#x226C;", StringToHex("between")
.Add "&#x226E;", StringToHex("nless")
.Add "&#x226F;", StringToHex("ngtr")
.Add "&#x2270;", StringToHex("nleq")
.Add "&#x2270;", StringToHex("nleqslant")
.Add "&#x2271;", StringToHex("ngeq")
.Add "&#x2271;", StringToHex("ngeqslant")
.Add "&#x2272;", StringToHex("lesssim")
.Add "&#x2273;", StringToHex("gtrsim")
.Add "&#x2274;", StringToHex("nlesssim")
.Add "&#x2275;", StringToHex("ngtrsim")
.Add "&#x2276;", StringToHex("lessgtr")
.Add "&#x2277;", StringToHex("gtrless")
.Add "&#x2278;", StringToHex("nlessgtr")
.Add "&#x2279;", StringToHex("ngtrless")
.Add "&#x227A;", StringToHex("prec")
.Add "&#x227B;", StringToHex("succ")
.Add "&#x227C;", StringToHex("preceq")
.Add "&#x227C;", StringToHex("preccurlyeq")
.Add "&#x227D;", StringToHex("succeq")
.Add "&#x227D;", StringToHex("succcurlyeq")
.Add "&#x227E;", StringToHex("precsim")
.Add "&#x227F;", StringToHex("succsim")
.Add "&#x2280;", StringToHex("nprec")
.Add "&#x2281;", StringToHex("nsucc")
.Add "&#x2282;", StringToHex("subset")
.Add "&#x2283;", StringToHex("supset")
.Add "&#x2284;", StringToHex("nsubset")
.Add "&#x2285;", StringToHex("nsupset")
.Add "&#x2286;", StringToHex("subseteq")
.Add "&#x2287;", StringToHex("supseteq")
.Add "&#x2288;", StringToHex("nsubseteq")
.Add "&#x2289;", StringToHex("nsupseteq")
.Add "&#x228A;", StringToHex("subsetneq")
.Add "&#x228B;", StringToHex("supsetneq")
.Add "&#x228D;", StringToHex("udot") 'new
.Add "&#x228E;", StringToHex("uplus")
.Add "&#x228F;", StringToHex("sqsubset")
.Add "&#x2290;", StringToHex("sqsupset")
.Add "&#x2291;", StringToHex("sqsubseteq")
.Add "&#x2292;", StringToHex("sqsupseteq")
.Add "&#x2293;", StringToHex("sqcap")
.Add "&#x2294;", StringToHex("sqcup")
.Add "&#x2295;", StringToHex("oplus")
.Add "&#x2296;", StringToHex("ominus")
.Add "&#x2297;", StringToHex("otimes")
.Add "&#x2298;", StringToHex("oslash")
.Add "&#x2299;", StringToHex("odot")
.Add "&#x229A;", StringToHex("circledcirc")
.Add "&#x229B;", StringToHex("circledast")
.Add "&#x229D;", StringToHex("circledash")
.Add "&#x229E;", StringToHex("boxplus")
.Add "&#x229F;", StringToHex("boxminus")
.Add "&#x22A0;", StringToHex("boxtimes")
.Add "&#x22A1;", StringToHex("boxdot")
'TODO: 22A2-22B1
.Add "&#x22B2;", StringToHex("rhd")
.Add "&#x22B3;", StringToHex("lhd")
.Add "&#x22B4;", StringToHex("unrhd")
.Add "&#x22B5;", StringToHex("unlhd")
'TODO: 22B6-22B7
.Add "&#x22B8;", StringToHex("multimap")
'TODO: 22B9-22C4
.Add "&#x22C5;", StringToHex("bullet")
.Add "&#x22C6;", StringToHex("star")
.Add "&#x22C7;", StringToHex("divideontimes")
.Add "&#x22C8;", StringToHex("bowtie")
.Add "&#x22C9;", StringToHex("ltimes")
.Add "&#x22CA;", StringToHex("rtimes")
.Add "&#x22CB;", StringToHex("leftthreetimes")
.Add "&#x22CC;", StringToHex("rightthreetimes")
.Add "&#x22CD;", StringToHex("backsimeq")
.Add "&#x22CE;", StringToHex("curlyvee")
.Add "&#x22CF;", StringToHex("curlywedge")
.Add "&#x22D0;", StringToHex("Subset")
.Add "&#x22D1;", StringToHex("Supset")
.Add "&#x22D2;", StringToHex("Cup")
.Add "&#x22D3;", StringToHex("Cap")
.Add "&#x22D4;", StringToHex("pitchfork")
.Add "&#x22D8;", StringToHex("lll")
.Add "&#x22D9;", StringToHex("ggg")
.Add "&#x22DA;", StringToHex("lesseqgtr")
.Add "&#x22DB;", StringToHex("gtreqless")
.Add "&#x22DC;", StringToHex("eqslantless")
.Add "&#x22DD;", StringToHex("eqslantgtr")
.Add "&#x22DE;", StringToHex("curlyeqprec")
.Add "&#x22DF;", StringToHex("curlyeqsucc")
.Add "&#x22E0;", StringToHex("npreceq")
.Add "&#x22E1;", StringToHex("nsucceq")
.Add "&#x22E2;", StringToHex("nsqsubseteq")
.Add "&#x22E3;", StringToHex("nsqsupseteq")
.Add "&#x22E4;", StringToHex("sqsubsetneq")
.Add "&#x22E5;", StringToHex("sqsupsetneq")
.Add "&#x22E6;", StringToHex("lnsim")
.Add "&#x22E7;", StringToHex("gnsim")
.Add "&#x22E8;", StringToHex("precnsim")
.Add "&#x22E9;", StringToHex("succnsim")
.Add "&#x22EA;", StringToHex("ntriangleleft")
.Add "&#x22EB;", StringToHex("ntriangleright")
.Add "&#x22EC;", StringToHex("ntrianglelefteq")
.Add "&#x22ED;", StringToHex("ntrianglerighteq")
'arrows
.Add "&#x2190;", StringToHex("leftarrow")
.Add "&#x2191;", StringToHex("uparrow")
.Add "&#x2192;", StringToHex("rightarrow")
.Add "&#x2192;", StringToHex("to")
.Add "&#x2193;", StringToHex("downarrow")
.Add "&#x2194;", StringToHex("leftrightarrow")
.Add "&#x2195;", StringToHex("updownarrow")
.Add "&#x2196;", StringToHex("nwarrow")
.Add "&#x2197;", StringToHex("nearrow")
.Add "&#x2198;", StringToHex("searrow")
.Add "&#x2199;", StringToHex("swarrow")
.Add "&#x219A;", StringToHex("nleftarrow")
.Add "&#x219B;", StringToHex("nrightarrow")
.Add "&#x219E;", StringToHex("twoheadleftarrow")
.Add "&#x219F;", StringToHex("twoheaduparrow") 'new
.Add "&#x21A0;", StringToHex("twoheadrightarrow")
.Add "&#x21A1;", StringToHex("twoheaddownarrow") 'new
.Add "&#x21A2;", StringToHex("leftarrowtail")
.Add "&#x21A3;", StringToHex("rightarrowtail")
.Add "&#x21A4;", StringToHex("leftmapsto") '\usepackage{MnSymbol}
.Add "&#x21A4;", StringToHex("mapsfrom") '\usepackage{stmaryrd}
.Add "&#x21A5;", StringToHex("upmapsto") 'new
.Add "&#x21A6;", StringToHex("mapsto")
.Add "&#x21A7;", StringToHex("downmapsto") 'new
.Add "&#x21A9;", StringToHex("hookleftarrow")
.Add "&#x21AA;", StringToHex("hookrightarrow")
.Add "&#x21AB;", StringToHex("looparrowleft")
.Add "&#x21AC;", StringToHex("looparrowright")
.Add "&#x21AD;", StringToHex("leftrightsquigarrow")
.Add "&#x21AE;", StringToHex("nleftrightarrow")
.Add "&#x21B0;", StringToHex("Lsh")
.Add "&#x21B1;", StringToHex("Rsh")
.Add "&#x21B6;", StringToHex("curvearrowleft")
.Add "&#x21B7;", StringToHex("curvearrowright")
.Add "&#x21BA;", StringToHex("circlearrowleft")
.Add "&#x21BB;", StringToHex("circlearrowright")
.Add "&#x21BC;", StringToHex("leftharpoonup")
.Add "&#x21BD;", StringToHex("leftharpoondown")
.Add "&#x21BE;", StringToHex("upharpoonright")
.Add "&#x21BF;", StringToHex("upharpoonleft")
.Add "&#x21C0;", StringToHex("rightharpoonup")
.Add "&#x21C1;", StringToHex("rightharpoondown")
.Add "&#x21C2;", StringToHex("downharpoonright")
.Add "&#x21C3;", StringToHex("downharpoonleft")
.Add "&#x21C4;", StringToHex("rightleftarrows")
.Add "&#x21C5;", StringToHex("updownarrows")
.Add "&#x21C6;", StringToHex("leftrightarrows")
.Add "&#x21C7;", StringToHex("leftleftarrows")
.Add "&#x21C8;", StringToHex("upuparrows")
.Add "&#x21C9;", StringToHex("rightrightarrows")
.Add "&#x21CA;", StringToHex("downdownarrows")
.Add "&#x21CB;", StringToHex("leftrightharpoons")
.Add "&#x21CC;", StringToHex("rightleftharpoons")
.Add "&#x21CD;", StringToHex("nLeftarrow")
.Add "&#x21CE;", StringToHex("nLeftrightarrow")
.Add "&#x21CF;", StringToHex("nRightarrow")
.Add "&#x21D0;", StringToHex("Leftarrow")
.Add "&#x21D1;", StringToHex("Uparrow")
.Add "&#x21D2;", StringToHex("Rightarrow")
.Add "&#x21D3;", StringToHex("Downarrow")
.Add "&#x21D4;", StringToHex("Leftrightarrow")
.Add "&#x21D5;", StringToHex("Updownarrow")
.Add "&#x21D6;", StringToHex("Nwarrow") 'new
.Add "&#x21D7;", StringToHex("Nearrow") 'new
.Add "&#x21D8;", StringToHex("Searrow") 'new
.Add "&#x21D9;", StringToHex("Swarrow") 'new
.Add "&#x21DA;", StringToHex("Lleftarrow")
.Add "&#x21DB;", StringToHex("Rrightarrow")
.Add "&#x21DC;", StringToHex("leftsquigarrow")
.Add "&#x21DD;", StringToHex("rightsquigarrow")
'.Add "&#x21E0;", StringToHex("dashleftarrow") 'wrong
.Add "&#x21E1;", StringToHex("dashuparrow")
'.Add "&#x21E2;", StringToHex("dashrightarrow") 'wrong
.Add "&#x21E3;", StringToHex("dashdownarrow")
.Add "&#x21F5;", StringToHex("downuparrows")
.Add "&#x21F6;", StringToHex("rightrightrightarrows") 'new
.Add "&#x27F5;", StringToHex("longleftarrow")
.Add "&#x27F6;", StringToHex("longrightarrow")
.Add "&#x27F7;", StringToHex("longleftrightarrow")
.Add "&#x27F8;", StringToHex("Longleftarrow")
.Add "&#x27F9;", StringToHex("Longrightarrow")
.Add "&#x27FA;", StringToHex("Longleftrightarrow")
.Add "&#x27FB;", StringToHex("longleftmapsto") 'new
.Add "&#x27FB;", StringToHex("longmapsfrom") 'new
.Add "&#x27FC;", StringToHex("longmapsto")
.Add "&#x290E;", StringToHex("dashleftarrow")
.Add "&#x290F;", StringToHex("dashrightarrow")
End With
End Sub

'workaround for stupid VB collection :-3
Public Function StringToHex(ByVal s As String) As String
Dim i As Long
For i = 1 To Len(s)
 StringToHex = StringToHex + Right("000" + Hex(AscW(Mid(s, i, 1)) And &HFFFF&), 4)
Next i
End Function

